


public class Coordenador {

	private GerenciadorDeInformacoes gerenciador;
	private int numeroDeIteracoes;
	private Monitor monitor;

	public Coordenador(GerenciadorDeInformacoes gerenciador, Monitor monitor,
			int numeroDeIteracoes) {
		super();
		this.gerenciador = gerenciador;
		this.monitor = monitor;
		this.numeroDeIteracoes = numeroDeIteracoes;
	}

	public void rodaJogo() {
		this.monitor.esperaOsTratadoresDeLinhasDormirem();

		for (int i = 0; i < this.numeroDeIteracoes; i++) {
			this.monitor.acordaOsTratadoresDeLinhas();
			this.monitor.esperaOsTratadoresDeLinhasDormirem();
			this.andaComAFormiga();
			this.gerenciador.avancaTabuleiro();
			// TODO: Eliminar isso
			//this.gerenciador.imprime();
		}
		// TODO: Eliminar isso
		this.gerenciador.imprime();
		this.gerenciador.imprimeP1();
		this.monitor.acordaOsTratadoresDeLinhas();
	}

	private void andaComAFormiga() {
		int formigaAtomicaX = this.gerenciador.getFormigaAtomicaX();
		int formigaAtomicaY = this.gerenciador.getFormigaAtomicaY();
		
		if (this.gerenciador.getTabuleiroPosterior()[formigaAtomicaY][formigaAtomicaX] == 0) {
			// gira para a esquerda
			this.gerenciador.setDirecaoDaFormiga((this.gerenciador.getDirecaoDaFormiga() + 3) % 4);
			this.gerenciador.getTabuleiroPosterior()[formigaAtomicaY][formigaAtomicaX] = 1;
		} else {
			// gira para a direita
			this.gerenciador.setDirecaoDaFormiga((this.gerenciador.getDirecaoDaFormiga() + 1) % 4);
			this.gerenciador.getTabuleiroPosterior()[formigaAtomicaY][formigaAtomicaX] = 0;
		}
		
		// Atualiza as coordenadas da formiga
		if (this.gerenciador.getDirecaoDaFormiga() == 0) {
			formigaAtomicaY--;
		} else if (this.gerenciador.getDirecaoDaFormiga() == 1) {
			formigaAtomicaX++;
		} else if (this.gerenciador.getDirecaoDaFormiga() == 2) {
			formigaAtomicaY++;
		} else {
			formigaAtomicaX--;
		}

		// Nao deixa a formiga escapar
		if (formigaAtomicaY == 0) {
			formigaAtomicaY = this.gerenciador.getTabuleiroAtual().length - 2;
		} else if (formigaAtomicaY == this.gerenciador.getTabuleiroAtual().length - 1) {
			formigaAtomicaY = 1;
		} else if (formigaAtomicaX == 0) {
			formigaAtomicaX = this.gerenciador.getTabuleiroAtual()[0].length - 2;
		} else if (formigaAtomicaX == this.gerenciador.getTabuleiroAtual()[0].length - 1) {
			formigaAtomicaX = 1;
		}
		
		// Faz a formiga avancar
		this.gerenciador.setFormigaAtomicaX(formigaAtomicaX);
		this.gerenciador.setFormigaAtomicaY(formigaAtomicaY);
	}
}
